package sliding_window;

public class Demo2 {
    //多多画图理解！！！
    public int minOperations(int[] nums, int x) {
        int ret = -1;
        //数组中所有元素的和
        int sum = 0;
        for (int a : nums) {
            sum += a;
        }
        //用反向思维，用所有元素的和 - x 的值来解题, 两边不好求解，就用总的减去中间求解两边，曲线救国
        int target = sum - x;
        //细节
        if (target < 0) {
            return -1;
        }
        //滑动窗口
        //tmpSum是窗口里边所有元素的值
        for ( int left = 0, right = 0, tmpSum = 0; right < nums.length; right++) {
            //进窗口
            tmpSum += nums[right];
            //判断
            while (tmpSum > target) {
                //出窗口
                tmpSum -= nums[left++];
            }
            //更新结果的条件
            if (tmpSum == target) {
                ret = Math.max(ret, right - left + 1);//更新长度
            }
        }
        if (ret == -1) {
            return -1;
        }
        return nums.length - ret;
    }
}
